#include"process.h"

#define NUM 101
#define STYLE '='
#define STYLE1 '>'
#define STYLE2 ' ' 
#define STYLE3 '.' 

const int pnum = 6 ;

//version2:
void FlushProcess(double total, double current) 
{
    //1.更新当前进度百分比
    double rate = current / total * 100;
    //printf("test:%.1lf%%\r", rate);
    
    //2.更新进度条主体
    //当前认为 1% 就是一个等号
    char bar[NUM];
    memset(bar, '\0', sizeof(bar));
    int i = 0;
    for(i = 0; i < (int)rate; ++i)
    {
        bar[i] = STYLE;
    }
    
    //3.更新旋转光标或者其他风格
    //此时我们用一个延长声明周期的static修饰一个整数
    static int num = 0;//以便控制打印下标
    num++;
    //这里解释一下：num最多到5,之后生命周期延长,到6的时候执行下面语句会为0
    num %= pnum;
    //也就是说:num一直都在 [0 - 5]循环
    
    //这里声明一个字符串数组
    char points[pnum + 1];//此数组大小为7,最后是'\0'占据
    //注意:Linux中编译器使用的是C99版本以上,所以可以这样写
    
    memset(points, '\0', sizeof(points));
    //这里我们要打印这个字符数组
    for (i = 0; i < pnum; ++i) 
    {
        //我们先打印. 之后将后面数组中的内容换为空格即可
        if (i < num) 
        {
            //此时初始化为.
            points[i] = STYLE3;
        } else {
            //否则打印空格
            points[i] = STYLE2;
        }
    }

    //4.打印
    printf("[%-100s][%.1lf%%]%s\r", bar, rate, points);
}

//void Process() 
//{
//    char bar[NUM];
//    //因为打印的是一个字符数组的进度条
//    //我们先将内存设置为'\0'
//    memset(bar, '\0', sizeof(bar));
//    const char *lable = "|/-\\";
//    int len = strlen(lable);
//    int cnt = 0;
//    int persent = 0;
//    while (cnt < NUM - 1) {
//        persent = (int)((float)(cnt + 1) / (NUM - 1) * 100);
//        printf("[%-79s][%-3d%%][%c]\r", bar, persent, lable[cnt % len]);
//        //这里要记得回车才能在原地显示
//        
//        bar[cnt] = STYLE;
//
//        //强制刷新
//        fflush(stdout);
//        usleep(50000);
//        cnt++;
//        if (cnt < NUM - 1) {
//            bar[cnt] = '>';
//        }
//
//
//    }
//    bar[--cnt] = '=';
//    printf("\r[%s]\n", bar);
//}
